javascript中的一元操作符
在javascript中,我们这样定义一元操作符:
只能操作一个值的操作符叫做一元操作符。一元操作符是ECMAScript中最简单的操作符。
1.递增和递减操作符
递增和递减操作符直接借鉴自C,而且各有两个版本:前置型和后置型。顾名思义,前置型应该位于要操作的变量之前,而后置型则应该位于要操作的变量之后。因此,在使用前置递增操作符给一个数值加1时,要把两个加号(++)放在这个数值变量前面,如下所示:
复制代码 代码示例:
var age = 29;
++age;
前置递增操作符把age的值变成了30(为29加上了1)。实际上,执行这个前置递增操作与执行以下操作效果相同:
复制代码 代码示例:
var age = 29;
age = age + 1;
执行前置递减操作的方法也类似,结果会从一个数值中减去1。使用前置递减操作符时,要把两个减号(–)放在相应变量的前面,如下所示:
复制代码 代码示例:
var age = 29;
-- age;
这样,age变量的值就减少为28(从29中减去了1)。
执行前置递增和递减操作时,变量的值就是在语句被求值以前改变的。(在计算机科学领域,这种情况通常被成为副效应。)请看下面的例子:
复制代码 代码示例:
var age = 29;
var anotherAge = --29 + 2;
alert(age); //28
alert(anotherAge); //30
变量anotherAge的初始值等于变量age的值前置递减之后加2。由于执行减法操作,age的值变成了28。所以再加上2的结果就是30。
由于前置递增和递减操作与执行语句的优先级相等,因此整个语句会从左至右被求值。再看一个例子:
复制代码 代码示例:
var num1 = 2;
var num2 = 20;
var num3 = --num1 + num2; //21
var num4 = num1 + num2; //21
在这里,num3之所以等于21是因为num1先减去了1才与num2相加。而变量num4也等于21是因为相应的加法操作使用了num1减去1之后的值。
后置型递增和递减操作符的语法不变(仍然分别是++和–),只不过要放在变量的后边而不是前面。后置型递增和递减有一个非常重要的区别,即递增和递减操作是在包含它们的语句被求值之后才执行的。这个区别在某些情况下不是什么问题,例如:
复制代码 代码示例:
var age = 29;
age++;
把递增操作符放在变量后面并不会改变语句的结果,因为递增是这条语句的唯一操作。但是,当语句中还包含其它操作时,上述区别就会非常明显了。请看下面的例子:
复制代码 代码示例:
var num1 = 2;
var num2 = 20;
var num3 = num1-- + num2; //22
var num4 = num1 + num2; //21
这里仅仅将前置递减改成了后置递减,就立即可以看到差别。在前面使用前置递减的例子中,num3和num4最后都等于21。而在这个例子中,num3等于22,num4等于21。差别的根源在于,这里在计算num3时使用了num1的原始值(2)完成了加法计算,而num4则使用了递减后的值(1)。
所有这4个操作符对任何值都适用,也就是它们不仅适用于整数,还可以用于字符串、布尔值、浮点数值和对象。在应用于不同的值时,递减和递增操作符遵循下列规则。
在应用于一个包含有效数字字符的字符串时。先将其转换为数字值,在执行加减1的操作。字符串变量变成数值变量。
在应用于一个不包含有效数字字符串时,将变量的值设置为NaN。字符串变量变成数值变量。
在应用于布尔值false时,先将其转换为0再执行加减1的操作。布尔值变量变成数值变量。
在应用与布尔值ture时,先将其转换为1再执行加减1的操作。布尔值变量变成数值变量。
在应用于浮点数值时,执行加减1的操作。
在应用对象时,先调用对象的valueOf()方法以取得一个可供操作的值。然后对该值应用前述规则。如果结果是NaN,则在调用toString()方法后在应用前述规则。对象变量变成数值变量。
以下示例展示了上面的一些规则:
复制代码 代码示例:
var s1 = "2";
var s2 = "z";
var b = fasle;
var f = 1.1;
var o = {
valueOf: function() {
return -1;
}
};
s1++; //3
s2++; //NaN
b++; //1
f--; //0.10000000000000009 (由于浮点舍入错误所致)
o--; //值变成数值-2
2.一元加和减操作符
绝大多数开发人员对一元加和减操作符都不会陌生,而且这两个ECMAScript操作符的作用与数学书上的完全不一样。一元操作符以一个加号(+)表示,放在数值前面,对数值不会产生任何影响,如下面的例子所示:
复制代码 代码示例:
var num = 25;
num = + num; //25
不过,在对非数值应用一元加操作符时,该操作符会像Number转型函数一样对这个值执行转换。换句话说,布尔值false和true将被转换为0和1,字符串值会被按照一组特殊的规则进行解析,而对象是先调用它们的valueOf()和toString()方法,再转换得到值。
下面的例子展示了对不同数据类型应用一元加操作符的结果:
复制代码 代码示例:
var s1 = "01";
var s2 = "1.1";
var s3 = "z";
var b = false;
var f = 1.1;
var o = function() {
valueOf: function() {
return -1;
}
};
s1 = +s1; //1
s2 = +s2; //1.1
s3 = +s3; //NaN
b = +b; //0
f = +f; //1.1
o = +o; //-1
一元操作符主要用于表示负数,例如将1转换成-1。下面的例子演示了这个简单的转换过程:
复制代码 代码示例:
var num = 25;
num = -25; //-25
在将一元减操作符应用于数值时,该值会变成负数(如上面的例子所示)。而当应用于非数值时,一元减操作符遵循与一元加操作符相同的规则,最后再将得到的数值转换为负数,如下面的例子所示:
复制代码 代码示例:
var s1 = "01";
var s2 = "1.1";
var s3 = "z";
var b = false;
var f = 1.1;
var = {
valueOf: function() {
return -1;
}
};
s1= -s1; //-1
s2 = -s2; //-1.1
s3 = -s3; //NaN
b = -b; //0
f = -f; //-1.1
o = -o; //1
一元加和减操作符主要用于基本的算术运算,也可以像前面实例所展示的一样用于转换数据类型。
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://v30.fanwenzhu.com/jiaob/shell/11778.shtml
相关文章
热门TAG
win10 ecshop 主机 阿里云 解决 配置 C# C++ 解析 SQL语句 命令 Go语言 方法 CSS3 HTML5 CSS win7 MSSQL 服务器配置 IIS7.5 IIS7 IIS6 IIS CentOS 7 Linux oracle数据库 oracle phpcms discuz discuz教程最新文章
-
Python2爬虫入门:正则表达
时间:2021-01-11
-
python程序的两种运行方式
时间:2021-01-11
-
Python3爬虫进阶:MySQL存储
时间:2021-01-11
-
python导入模块的关键字是
时间:2021-01-11
-
python去重函数是什么
时间:2021-01-09
-
如何用python爬虫开源项目
时间:2021-01-09
-
Photoshop设计个性笔刷制作
时间:2021-01-09
-
深入理解PHP与WEB服务器交
时间:2021-01-09
热门文章
-
解析shell字段分隔符的用法(图文)
时间:2020-12-22
-
Python3爬虫进阶:MongoDB存储(非关系型数
时间:2020-12-29
-
php如何接收json数据
时间:2021-01-08
-
php ucwords函数怎么用
时间:2021-01-08
-
如何在Linux或者UNIX下调试Bash Shell脚本
时间:2020-12-22
-
python中pow什么意思
时间:2021-01-08
-
如何在python数据挖掘使用pandas包?
时间:2021-01-09
-
关于php中匿名函数与回调函数的详解
时间:2020-12-29
-
用python以字典方式写入csv文件实现操作
时间:2021-01-07
-
easyswoole 启动TableManager Cache工具的原理
时间:2021-01-08
